优化瑞芯微rk3566 tf卡速度uhs SDR104

您所在的位置:网站首页 tf卡 c10 优化瑞芯微rk3566 tf卡速度uhs SDR104

优化瑞芯微rk3566 tf卡速度uhs SDR104

2024-02-19 01:18| 来源: 网络整理| 查看: 265

环境

开发板:orangepi3B CPU:rk3566 TF卡速度标识:C10,U3,V30

起因

对于tf卡启动的系统来说,io会成为一个很关键的瓶颈,所以总希望系统能跑得快一点。我手头用的是一张金士顿的高性能tf卡,开机启动发现比emmc慢不少,用dd命令简单测速发现tf卡读写速度都只有25Mb/s而这个卡在usb3.0读卡器加持下可以达到80Mb/s的写入,150Mb/s的读取速度,最后发现SDIO工作模式不正确导致的,下面说一下解决过程,方法理论上适用于所有支持sdio uhs的开发板。

解决过程

翻阅orangepi3b内核设备树配置,发现这个板子是支持uhs SDR104并且已经启用了uhs SDR104功能的。 从tf卡启动系统之后查看内核日志发现tf卡工作在high speed模式,频率只有50MHz,这里orangepi3b tf卡用了mmc1这个位置,mmc0是emmc

root@orangepi3b:/home/orangepi# dmesg |grep mmc1 [ 10.260135] vccio_sd: ramp_delay not set [ 10.272792] mmc_host mmc1: Bus speed (slot 0) = 375000Hz (slot req 400000Hz, actual 375000HZ div = 0) [ 10.314653] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req 50000000Hz, actual 50000000HZ div = 0) [ 10.314992] mmc1: new high speed SDXC card at address 5048 [ 10.316478] mmcblk1: mmc1:5048 SD128 116 GiB [ 10.325545] mmcblk1: p1 p2

查看debugfs亦是如此:

root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios clock: 50000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 2 (sd high-speed) signal voltage: 0 (3.30 V) driver type: 0 (driver type B)

但是,但是,但是,从emmc启动系统之后再插入tf卡,而不是从tf卡启动系统,情况就变得不一样了

root@orangepi3b:/home/orangepi# dmesg |grep mmc1 [ 4156.323455] vccio_sd: ramp_delay not set [ 4156.346018] mmc_host mmc1: Bus speed (slot 0) = 148500000Hz (slot req 150000000Hz, actual 148500000HZ div = 0) [ 4156.610947] dwmmc_rockchip fe2b0000.dwmmc: Successfully tuned phase to 270 [ 4156.610973] mmc1: new ultra high speed SDR104 SDXC card at address 5048 [ 4156.612291] mmcblk1: mmc1:5048 SD128 116 GiB [ 4156.617655] mmcblk1: p1 p2 root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios clock: 150000000 Hz actual clock: 148500000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 6 (sd uhs SDR104) signal voltage: 1 (1.80 V) driver type: 0 (driver type B)

那问题也显而易见了,tf卡在uboot启动阶段被初始化成了high speed模式,然后内核在初始化的时候并没有再去重新配置tf卡的速度和工作模式了,这里有一个比较简单的办法在tf卡启动系统过后切换到uhs SDR104模式:

root@orangepi3b:/home/orangepi# echo 150000000 > /sys/kernel/debug/mmc1/clock

只需要将sdio口的评率设置上去即可,这个时候再看debugfs会发现评率其实已经切换了,但是模式还没有切换,这个不用担心,之后对tf进行读写操作就会切换tf卡的模式为uhs SDR104了

root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios clock: 150000000 Hz actual clock: 148500000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 2 (sd high-speed) signal voltage: 0 (3.30 V) driver type: 0 (driver type B)

切换过后一会儿的效果,可以看到模式已经切换到SDR104

root@orangepi3b:/home/orangepi# cat /sys/kernel/debug/mmc1/ios clock: 150000000 Hz actual clock: 148500000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 6 (sd uhs SDR104) signal voltage: 1 (1.80 V) driver type: 0 (driver type B)

这个方法的缺点是系统启动完成过后才能切换,开机速度依然上不去。 这个方法理论上适用于其他芯片和板子,希望这边文章能对tf卡启动开发板的小伙伴有一定的帮助。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3